// 使用当前时间的“时+分”信息为名称来创建一个文件夹
// 然后在该文件夹下以“秒”信息为名称来创建一个文件
// 需要判断文件夹是否存在
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <time.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/types.h>

int main(int argc, char *argv[]){

	int count = 0;
	// 每隔1s写入一个文件，60秒后自动终止
	while(count < 60){

		/*创建临时变量，用于记录文件创建过程中的信息*/

		// 创建目录时的信息
		int mkdirtemp;
	
		// 创建文件时的信息
		int mkfiletemp;

		DIR *dp;

		// 记录时间信息
		char dirtimebuf[5];
		char filetimebuf[3];

		char dirnamebuf[8]="DIR";
		char filenamebuf[7]="FILE";

		// 创建时间结构体指针，用来记录时间信息
		struct tm *p;

		// 用来记录创建文件信息
		int fd,temp;

		// 创建time_t变量，用来记录时间信息
		time_t timetemp;

		// 记录当前路径的信息
		char npath[100];
	

		// 使用简单的秒延迟，每个1s执行一次
		sleep(1);

		// 读取当前信息
		time(&timetemp);

		// 打印当前时间
		printf("当前时间为：%s\n", asctime(gmtime(&timetemp)));

		// 将时间信息转为tm结构体指针格式
		p = localtime(&timetemp);

		printf("时+分：%02d:%02d\n", p->tm_hour, p->tm_min);
		printf("秒：%02d\n", p->tm_sec);

		// 将时间信息写入到dirtimebuf 和 filetimebuf中
		sprintf(dirtimebuf, "%02d%02d", p->tm_hour, p->tm_min);
		sprintf(filetimebuf, "%02d", p->tm_sec);

		// 将时间信息写入到dirnamebuf,filenamebuf缓冲器中，形成文件名
		strcat(dirnamebuf,dirtimebuf);
		strcat(filenamebuf, filetimebuf);

		printf("目录信息为：%s\n", dirnamebuf);
		printf("文件信息为：%s\n", filenamebuf);
		// 判断文件夹dirnamebuf是否存在，如果不存在则创建该文件夹,如果存在则打开
		dp = opendir(dirnamebuf);
	
		// 出错，则说明目录不存在	
		if(dp == NULL){
			printf("该文件夹%s不存在！\n", dirnamebuf);
			printf("下面将创建该文件夹！...\n");
			
			mkdirtemp = mkdir(dirnamebuf, S_IRUSR|S_IWUSR|S_IXUSR);

			// 判断文件夹是否创建成功
			if(mkdirtemp == -1){
				printf("文件夹%s创建失败!\n",dirnamebuf);
				return -1;
			}

			printf("文件夹%s创建成功!\n", dirnamebuf);

			// 使用chdir函数进入到该文件夹中
			temp = chdir(dirnamebuf);
		
			if(temp == -1){
				printf("切换目录%s失败!\n", dirnamebuf);
				return -2;
			}

			printf("切换目录%s成功!\n", dirnamebuf);

			// 使用getcmd函数读取当前路径
			if(getcwd(npath,100) == NULL){
				printf("未能获得当前路径!\n");		
			}
			printf("当前路径为：%s\n",npath);
		
			// 进入到文件夹后，以秒为单位创建文件
			mkfiletemp = open(filenamebuf, O_RDWR | O_CREAT, S_IRWXU);
	
			if(mkfiletemp == -1){
				printf("创建文件%s失败！\n", filenamebuf);
				return -4;
			}

			printf("创建文件 %s 成功!\n", filenamebuf);
			close(mkfiletemp);
			
			chdir("..");

			closedir(dp);
			//return 0;

		}else{
			printf("该文件夹%s存在！\n", dirnamebuf);
			closedir(dp);
			// 如果该文件夹存在，则进入文件夹并创建文件
			temp = chdir(dirnamebuf);
		
			if(temp == -1){
				printf("切换目录%s失败!\n", dirnamebuf);
				return -2;
			}

			printf("切换目录%s成功!\n", dirnamebuf);

			// 使用getcmd函数读取当前路径
			if(getcwd(npath,100) == NULL){
				printf("未能获得当前工作目录路径！\n");
				return -3;
			}

			printf("当前路径为：%s\n",npath);

			mkfiletemp = open(filenamebuf, O_RDWR | O_CREAT, S_IRWXU);
			if(mkfiletemp == -1){
				printf("创建文件%s失败!\n",filenamebuf);
				return -4;
			}
		
			printf("创建文件 %s 成功!\n", filenamebuf);

			// 关闭文件夹
			close(mkfiletemp);
			
			chdir("..");
		}
		printf("--------第%d次文件创建！------------\n",count+1);
		count++;
	}
	return 0;
}
